package my_web.page.Imp;
import java.util.List;
import dao.dao.Dao;
import my_web.page.Page;
import my_web.page.PageEngine;
import my_web.page.PageParam;
/**
 * 创建PageEngineFactory
 * 主要功能：
 * 1.创建 实现了PageEngine接口的 私有化的成员内部类PageEngineImpl
 * 2.创建public实例方法,从而创建指定类的分页引擎
 * 3.
 */
public class PageEngineFactory {
	/**
	 * 1.创建 实现了PageEngine接口的 私有化的成员内部类PageEngineImpl
	 */
	public static class PageEngineImp implements PageEngine{
		//获取总记录数
		public int getTotal() throws Exception {
			return 0;
		}
		//获取当前页的实际记录数
		public List<?> getReclist(int start, int end) throws Exception {
			return null;
		}
	}
	/**
	 * 2.创建public实例方法,创建指定类的分页引擎
	 * @param class1 
	 * @param presql-sql语句
	 * @param list--sql语句参数
	 * @param dto
	 * @return
	 */
	public static PageEngine createPageEngine(Class<?> clazz,Dao dao,String sql,Object... args){
		PageEngine engine=new PageEngineImp(){
			//获取总记录
			public int getTotal() throws Exception {
				return dao.queryInteger("select count(1) from ("+sql+") t",args);
			}
			//获取当前页的记录数
			public List<?> getReclist(int start, int end) throws Exception {
				String sql_="select rownum row_, t.*  from ("+ sql+ ") t where rownum <="+end;
				return dao.queryBeanList(clazz, "select * from ("+sql_+") where row_>"+start,args);
			}
		};
		return engine;
	}
	public static Page createOraclePage(Class<?> clazz,Dao dao,String psql,PageParam pageParam,Object... args){
		return new PageImp(createPageEngine(clazz,dao, psql,args),pageParam);	
	}
}
